home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / i / internet / software / tuwtcpsr / tcp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-04  |  6.0 KB  |  201 lines

  1. #ifndef _INET_TCP
  2. #define _INET_TCP
  3.  
  4. #ifndef _INET_PKT
  5. #include "pktdrv.h"
  6. #endif
  7.  
  8. #ifndef _INET_IP
  9. #include "ip.h"
  10. #endif
  11.  
  12. #ifndef _INET_QUEUE
  13. #include "queue.h"
  14. #endif
  15.  
  16. #ifndef _INET_TIMER
  17. #include "timer.h"
  18. #endif
  19.  
  20. #ifndef _INET_ICUST
  21. #include "inetcust.h"
  22. #endif
  23.  
  24. typedef struct                 /* tcp header */
  25. {
  26.     u_short    src_port;        /* source port number */
  27.     u_short    dst_port;        /* destination port numbe */
  28.     u_long    seq;            /* sequence number of sent data */
  29.     u_long    ack;            /* ack number acking my sent data */
  30.     u_char    doffs;            /* data offset */
  31.     u_char    flags;            /* flags */
  32.     u_short    window;            /* windowsize of sender of this packet */
  33.     u_short    chksum;            /* checksum of tcp header, pseudoheader & data */
  34.     u_short    urgent;            /* urgent pointer:offset from seq num */
  35. } TCP;
  36.  
  37. /* macros to compare seqence numbers */
  38.  
  39. #define    SEQ_LT(a,b)        ((long)((a)-(b)) < 0)
  40. #define    SEQ_LE(a,b)        ((long)((a)-(b)) <= 0)
  41. #define    SEQ_GT(a,b)        ((long)((a)-(b)) > 0)
  42. #define    SEQ_GE(a,b)        ((long)((a)-(b)) >= 0)
  43.  
  44.  
  45.  
  46. #ifndef __TCP_PSEUDO
  47. #define __TCP_PSEUDO
  48.  
  49. typedef struct                 /* tcp pseudoheader */
  50. {
  51.     INADDR    src;            /* source internet addr */
  52.     INADDR    dst;            /* destination internet addr */
  53.     u_short    protocol;        /* used protocol (hibyte must be zero!!) */
  54.     u_short    length;            /* length of tcp header + tcp data */
  55. } TCP_PSEUDO;
  56. #endif
  57.  
  58.  
  59. typedef struct                /* tcp option */
  60. {
  61.     u_char    opt;            /* kind of option */
  62.     u_char    length;            /* length of option incl. opt,length and data */
  63.     u_short    data;            /* option data */
  64. } TCP_OPT;
  65.  
  66. #define TCP_OPTEOL        0
  67. #define TCP_OPTNOP        1
  68. #define TCP_OPTMAXSEG    2
  69. #define TCP_DATAOFFS    0x50
  70. #define TCP_DATAOFFSINCR     0x10
  71.  
  72.             /* flags in the tcp header */
  73. #define    TCP_FIN        0x01
  74. #define    TCP_SYN        0x02
  75. #define    TCP_RST        0x04
  76. #define    TCP_PUSH    0x08
  77. #define    TCP_ACK        0x10
  78. #define    TCP_URG        0x20
  79. #define TCP_UNSENT    0x100
  80.  
  81. #define tcp_hdrlen(tp)    ( (u_short)( (((TCP *)(tp))->doffs)) >> 2)
  82.  
  83.  
  84.  
  85.                 /* tcp states */
  86. #define TCP_CLOSED    0        /* finack received (fictive) */
  87. #define TCP_LISTEN    1        /* listening for connection */
  88. #define TCP_SYNSENT    2        /* syn sent, active open */
  89. #define TCP_SYNREC    3        /* syn received, synack+syn sent. */
  90. #define TCP_ESTAB    4        /* established */
  91. #define TCP_FINWT1    5        /* sent FIN */
  92. #define TCP_FINWT2    6        /* sent FIN, received FINACK */
  93. #define TCP_CLOSEWT    7        /* received FIN waiting for close */
  94. #define TCP_CLOSING    8        /* sent FIN, received FIN (waiting for FINACK) */
  95. #define TCP_LASTACK    9        /* fin received, finack+fin sent */
  96. #define TCP_TIMEWT    10        /* dally after sending final FINACK */
  97.  
  98.  
  99. #define MAXTCPSEG    (MAXIPSEG-sizeof(IP)-sizeof(TCP))
  100. #define MYMAXTCPSEG  1024
  101. #define MIN_OUTBUFSIZE    (MYMAXTCPSEG * 3)
  102.  
  103. typedef struct
  104. {
  105.     ETH            et;
  106.     IP            ip;
  107.     TCP            tcp;
  108.     long    opt;
  109. } TCP_PACKET;
  110.  
  111. #define tcp_option(o,l,d) (((long)(o)<<24) + ((long)(l)<<16) + (d))
  112. #define tcp_getopt(tcp) (((TCP_OPT *)(((char *)tcp) + sizeof(TCP)))->data)
  113.  
  114. typedef struct _tcp_seg
  115. {
  116.     struct _tcp_seg *next;    /* link to next segment */
  117.     u_long        seq;        /* sequence number of this segment */
  118.     u_long        length;        /* datasize of this segment */
  119.     u_short        flags;        /* flags to send */
  120. } TCP_SEGMENT;
  121.  
  122. typedef int (*TCP_UPCALL)(int,char *,int);
  123.  
  124.         /* upcall codes if datapointer in upcall is NULL */
  125. #define TCP_UCESTAB        -1
  126. #define TCP_UCRESET        -2
  127. #define TCP_UCCLOSING    -3
  128. #define TCP_UCTIMEOUT    -4
  129. #define TCP_UCDATA        -5
  130. #define TCP_UCCLOSEWT    -6
  131. #define TCP_UCCLOSED    -7
  132. #define TCP_UNREACHABLE    -8
  133.  
  134.  
  135. typedef struct _tcp_tcb
  136. {
  137.     struct _tcp_tcb *next;    /* link to next tcb */
  138.     int            handle;
  139.     int            active;        /* this connection is active/listening only */
  140.     u_short        lcl_port;    /* my portnumber */
  141.     u_short        fgn_port;    /* portnumber of foreign host */
  142.     u_short        state;        /* state of transmission */
  143.     INADDR        fhost;        /* address of foreign host */
  144.     TCP_SEGMENT    *resend;    /* retransmission queue */
  145.     TCP_QUEUE    q_out;        /* output queue */
  146.     TCP_QUEUE    q_in;        /* input queue */
  147.     u_short        maxseg;        /* maxsegsize */
  148.     u_long        snduna;        /* sequence nr of last unack'ed octet */
  149.     u_long        sndnxt;        /* next sequence nr to put into retr. queue */
  150.     u_long        sndact;        /* next sequence nr going out */
  151.     u_short        sndmax;        /* max window got from peer */
  152.     u_short        sndwnd;        /* windowsize of foreign host */
  153.     u_short        sndest;        /* estimated window of peer */
  154.     u_short        sndup;        /* urgent pointer */
  155.     u_long        sndwl1;        /* last seq num for update of window */
  156.     u_long        sndwl2;        /* last ack of last window update */
  157.     u_long        sndiss;        /* initial send seq num */
  158.     u_long        rcvnxt;        /* seq number awaited on next packet */
  159.     u_short        rcvwnd;        /* receive window told to peer */
  160.     u_short        rcvact;        /* actual window */
  161.     u_short        rcvup;        /* receive urgent pointer */
  162.     u_short        rcvdlen;    /* size of data at last ack */
  163.     u_long        rcvirs;        /* initial receive sequence num */
  164.     u_long        finack;        /* seq num to ack fin */
  165.     u_long        timeout;    /* timeout value */
  166.     u_short        rxmitcnt;    /* retransmit counter */
  167.     TIMER        tcp_tm;        /* timer allocated for this connection */
  168.     TIMER        tcp_ack;    /* ack delay timer */
  169.     TIMER        tcp_tmresend;  /* retransmit timer */
  170.     TCP_UPCALL    upcall;        /* function to upcall on event */
  171. } TCP_TCB;
  172.  
  173.  
  174.  
  175. #define TCP_DEFMAXTCPS    10        /* default number of possible TCP connections */
  176.  
  177. #define TCP_RETRANSMIT    (250L/5)    /* = 250 msec */
  178. #define TCP_OPENTIMEOUT (30000L/5)    /* = 30 sec */
  179. #define TCP_WAITTIMEOUT (20000L/5)    /* = 20 sec */
  180. #define TCP_ACKTIMEOUT  (10L/5)        /* = 10 msec */
  181. #define TCP_NODELAY     (0L/5)        /* = 0 msec */
  182. #define TCP_EXPEDIT        (500L/5)    /* = 500 msec */
  183.  
  184. int tcp_init(void);
  185. int tcp_exit(void);
  186.  
  187.  
  188. TCP_TCB *tcp_gettcb(int tcb);
  189. int tcp_create(long,long, TCP_UPCALL);
  190. int tcp_delete(int tcb);
  191. int tcp_open(int tcb,INADDR fhost,u_short port,u_long timeout);
  192. int tcp_bind(int tcb,u_short lcl_port);
  193. int tcp_listen(int tcb,u_short lcl_port, u_long timeout);
  194. int tcp_close(int tcb);
  195. int tcp_abort(int tcb);
  196. long tcp_write(int tcb, char *buffer, u_short len, u_char flags);
  197. long tcp_read(int tcb, char *buffer, u_short len);
  198. u_short tcp_newport(void);
  199.  
  200.  
  201. #endif